package com.dj.merchant.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.dj.merchant.dto.OfflineStoreData;
import com.dj.merchant.mapper.OfflineStoreMapper;
import com.dj.merchant.mapper.StoreExtendInfoMapper;
import com.dj.merchant.mapper.StoreInfoMapper;
import com.dj.merchant.model.*;
import com.dj.merchant.service.OfflineInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * @Author : Jimmy
 * @Date : 2020/12/17 15:39
 * @Desc : dj-version-tag
 **/
@Service
public class OfflineInfoServiceImpl implements OfflineInfoService {


    @Autowired
    private OfflineStoreMapper offlineStoreMapper;

    @Autowired
    private StoreInfoMapper storeInfoMapper;

    @Autowired
    private StoreExtendInfoMapper storeExtendInfoMapper;

    /**
     * 创建门店
     *
     * @param offlineStoreData
     * @return
     */
    @Transactional
    @Override
    public Long createOffline(OfflineStoreData offlineStoreData) {

        Date now = getNow();
        StoreInfo storeInfo = new StoreInfo();
        BeanUtil.copyProperties(offlineStoreData, storeInfo);
        storeInfo.setUpdateTime(now);
        storeInfo.setCreateTime(now);
        storeInfoMapper.insert(storeInfo);

        OfflineStore offlineStore = new OfflineStore();
        BeanUtil.copyProperties(offlineStoreData, offlineStore);
        offlineStore.setStoreId(storeInfo.getStoreId());
        offlineStore.setCreateTime(now);
        offlineStore.setUpdateTime(now);
        offlineStoreMapper.insert(offlineStore);

        String description = offlineStoreData.getDescription();
        if (!StrUtil.hasBlank(description)) {
            StoreExtendInfo storeExtendInfo = new StoreExtendInfo();
            BeanUtil.copyProperties(storeInfo, storeExtendInfo);
            storeExtendInfo.setStoreId(storeInfo.getStoreId());
            storeExtendInfo.setDescription(description);
            storeExtendInfoMapper.insert(storeExtendInfo);
        }
        return offlineStore.getStoreId();
    }


    @Override
    @Transactional
    public Long updateOffline(OfflineStoreData offlineStoreData) {

        Date now = getNow();
        StoreInfo storeInfo = new StoreInfo();
        BeanUtil.copyProperties(offlineStoreData, storeInfo);

        StoreInfoExample storeInfoExample = new StoreInfoExample();

        storeInfoExample.createCriteria().andStoreIdEqualTo(storeInfo.getStoreId());

        long l = storeInfoMapper.countByExample(storeInfoExample);

        if (l==0){
            return Long.parseLong("20000101");
        }
        storeInfoMapper.updateByPrimaryKeySelective(storeInfo);

        OfflineStore offlineStore = new OfflineStore();
        BeanUtil.copyProperties(offlineStoreData, offlineStore);
        OfflineStoreExample offlineStoreExample = new OfflineStoreExample();
        offlineStore.setUpdateTime(now);
        offlineStoreMapper.updateByExampleSelective(offlineStore, offlineStoreExample);

        String description = offlineStoreData.getDescription();
        if (!StrUtil.hasBlank(description)) {
            StoreExtendInfo storeExtendInfo = new StoreExtendInfo();
            BeanUtil.copyProperties(storeInfo, storeExtendInfo);
            storeExtendInfo.setStoreId(storeInfo.getStoreId());
            storeExtendInfo.setDescription(description);
            storeExtendInfo.setUpdateTime(now);
            StoreExtendInfoExample storeExtendInfoExample = new StoreExtendInfoExample();
            storeExtendInfoMapper.updateByExampleSelective(storeExtendInfo,storeExtendInfoExample);
        }
        return storeInfo.getStoreId();
    }



    @Override
    public List<OfflineStore> selectOffline(OfflineStoreData offlineStoreData){

        OfflineStore offlineStore = new OfflineStore();
        BeanUtil.copyProperties(offlineStoreData,offlineStore);
//        List<OfflineStore> offlineStores = offlineStoreMapper.selectBySearch(offlineStore);

        return null;
    }


    @Override
    public OfflineStore queryOffline(String id) {

//        offlineStoreMapper.
        return null;
    }

    private Date getNow() {
        String formatNow = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        Date now = DateUtil.parse(formatNow);
        return now;
    }
}
